package br.com.projetosivan.dao.impl;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;

import br.com.projetosivan.dao.ProdutoDao;
import br.com.projetosivan.model.Produto;
import br.com.projetosivan.util.HibernateUtil;

public class ProdutoDaoImp implements ProdutoDao {

    public Long save(Produto item) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        session.save(item);
        t.commit();
        session.flush();
        session.close();
        return item.getId();
    }
    public Produto getProduto(long id) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Produto p = (Produto) session.load(Produto.class, id);
        return p;
    }
    public List<Produto> list() {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        List lista = session.createQuery("from Produto order by id").list();
        t.commit();
        session.flush();
        session.close();
        return lista;
    }
    
    public List<Produto> getProdutosByTipoProduto(Long id) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        List lista = session.createQuery("from Produto where tipoProduto.id = :id order by nome").setParameter("id", id).list();
        t.commit();
        session.flush();
        session.close();
        return lista;
    }
    
    public void remove(Produto item) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        session.delete(item);
        t.commit();
        session.flush();
        session.close();
    }
    public void update(Produto item) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        session.update(item);
        t.commit();
        session.flush();
        session.close();
    }
}